60806040526040518060400160405280670214e8348c4f000067ffffffffffffffff1681526020016702c68af0bb14000067ffffffffffffffff1681525060079060026200004f9291906200024b565b506001600860006101000a81548160ff0219169083151502179055503480156200007857600080fd5b5060405162004df338038062004df383398181016040528101906200009e91906200055b565b82620000bf620000b36200016360201b60201c565b6200016b60201b60201c565b60018081905550620000d7816200022f60201b60201c565b5080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200063a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806004908051906020019062000247929190620002a9565b5050565b82805482825590600052602060002090810192821562000296579160200282015b8281111562000295578251829067ffffffffffffffff169055916020019190600101906200026c565b5b509050620002a591906200033a565b5090565b828054620002b79062000605565b90600052602060002090601f016020900481019282620002db576000855562000327565b82601f10620002f657805160ff191683800117855562000327565b8280016001018555821562000327579182015b828111156200032657825182559160200191906001019062000309565b5b5090506200033691906200033a565b5090565b5b80821115620003555760008160009055506001016200033b565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003c28262000377565b810181811067ffffffffffffffff82111715620003e457620003e362000388565b5b80604052505050565b6000620003f962000359565b9050620004078282620003b7565b919050565b600067ffffffffffffffff8211156200042a576200042962000388565b5b620004358262000377565b9050602081019050919050565b60005b838110156200046257808201518184015260208101905062000445565b8381111562000472576000848401525b50505050565b60006200048f62000489846200040c565b620003ed565b905082815260208101848484011115620004ae57620004ad62000372565b5b620004bb84828562000442565b509392505050565b600082601f830112620004db57620004da6200036d565b5b8151620004ed84826020860162000478565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200052382620004f6565b9050919050565b620005358162000516565b81146200054157600080fd5b50565b60008151905062000555816200052a565b92915050565b60008060006060848603121562000577576200057662000363565b5b600084015167ffffffffffffffff81111562000598576200059762000368565b5b620005a686828701620004c3565b9350506020620005b98682870162000544565b9250506040620005cc8682870162000544565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200061e57607f821691505b602082108103620006345762000633620005d6565b5b50919050565b6147a9806200064a6000396000f3fe60806040526004361061013f5760003560e01c80635fd8c710116100b6578063bd85b0391161006f578063bd85b03914610448578063d601f10a14610485578063e985e9c51461049c578063ef5bac25146104d9578063f242432a14610504578063f2fde38b1461052d5761013f565b80635fd8c71014610374578063661f22691461038b578063715018a6146103b45780638da5cb5b146103cb57806395c47704146103f6578063a22cb4651461041f5761013f565b80631f0808d4116101085780631f0808d41461022e5780632eb2c2d61461025757806335d2d3bf1461028057806343b967e3146102bd5780634e1273f4146102fa5780634f558e79146103375761013f565b8062fdd58e1461014457806301ffc9a7146101815780630e89341c146101be5780631130630c146101fb5780631249c58b14610224575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612adf565b610556565b6040516101789190612b2e565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612ba1565b61061f565b6040516101b59190612be9565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c04565b610701565b6040516101f29190612cca565b60405180910390f35b34801561020757600080fd5b50610222600480360381019061021d9190612e21565b610795565b005b61022c61081d565b005b34801561023a57600080fd5b5061025560048036038101906102509190612ea4565b610bb8565b005b34801561026357600080fd5b5061027e6004803603810190610279919061303a565b610d47565b005b34801561028c57600080fd5b506102a760048036038101906102a29190613109565b610de8565b6040516102b49190613152565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613109565b610e08565b6040516102f19190613152565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613230565b610e28565b60405161032e9190613366565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190612c04565b610f41565b60405161036b9190612be9565b60405180910390f35b34801561038057600080fd5b50610389610f55565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613388565b6111ac565b005b3480156103c057600080fd5b506103c9611373565b005b3480156103d757600080fd5b506103e06113fb565b6040516103ed91906133e0565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613388565b611424565b005b34801561042b57600080fd5b5061044660048036038101906104419190613427565b6115eb565b005b34801561045457600080fd5b5061046f600480360381019061046a9190612c04565b611601565b60405161047c9190612b2e565b60405180910390f35b34801561049157600080fd5b5061049a61161e565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613467565b6116c6565b6040516104d09190612be9565b60405180910390f35b3480156104e557600080fd5b506104ee61175a565b6040516104fb9190612be9565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906134a7565b6117ed565b005b34801561053957600080fd5b50610554600480360381019061054f9190613109565b61188e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd906135b0565b60405180910390fd5b6002600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ea57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106fa57506106f982611985565b5b9050919050565b606060048054610710906135ff565b80601f016020809104026020016040519081016040528092919081815260200182805461073c906135ff565b80156107895780601f1061075e57610100808354040283529160200191610789565b820191906000526020600020905b81548152906001019060200180831161076c57829003601f168201915b50505050509050919050565b61079d6119ef565b73ffffffffffffffffffffffffffffffffffffffff166107bb6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108089061367c565b60405180910390fd5b61081a816119f7565b50565b600260015403610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906136e8565b60405180910390fd5b600260018190555060001515600860009054906101000a900460ff161515146108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b79061377a565b60405180910390fd5b61014d61ffff166001600660009054906101000a900461ffff166108e491906137c9565b61ffff161115610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090613873565b60405180910390fd5b6000600290506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff160361098f57600090506109ec565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16036109eb57600190505b5b60028160ff1603610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a29906138df565b60405180910390fd5b60078160ff1681548110610a4957610a486138ff565b5b90600052602060002001543414610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c906139a0565b60405180910390fd5b6001600660008282829054906101000a900461ffff16610ab591906137c9565b92506101000a81548161ffff021916908361ffff16021790555060008160ff1614610b37576002600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055610b90565b6002600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555b50610bae336000600160405180602001604052806000815250611a11565b5060018081905550565b610bc06119ef565b73ffffffffffffffffffffffffffffffffffffffff16610bde6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061367c565b60405180910390fd5b600860009054906101000a900460ff16610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613a0c565b60405180910390fd5b61014d61ffff1681600660009054906101000a900461ffff16610ca691906137c9565b61ffff161115610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613a9e565b60405180910390fd5b80600660008282829054906101000a900461ffff16610d0a91906137c9565b92506101000a81548161ffff021916908361ffff160217905550610d443360008361ffff1660405180602001604052806000815250611a11565b50565b610d4f6119ef565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d955750610d9485610d8f6119ef565b6116c6565b5b610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90613b30565b60405180910390fd5b610de18585858585611ba7565b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60608151835114610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613bc2565b60405180910390fd5b6000835167ffffffffffffffff811115610e8b57610e8a612cf6565b5b604051908082528060200260200182016040528015610eb95781602001602082028036833780820191505090505b50905060005b8451811015610f3657610f06858281518110610ede57610edd6138ff565b5b6020026020010151858381518110610ef957610ef86138ff565b5b6020026020010151610556565b828281518110610f1957610f186138ff565b5b60200260200101818152505080610f2f90613be2565b9050610ebf565b508091505092915050565b600080610f4d83611601565b119050919050565b610f5d6119ef565b73ffffffffffffffffffffffffffffffffffffffff16610f7b6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc89061367c565b60405180910390fd5b60004711611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613c76565b60405180910390fd5b600060646014476110259190613c96565b61102f9190613d1f565b90506000814761103f9190613d50565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161108990613db5565b60006040518083038185875af1925050503d80600081146110c6576040519150601f19603f3d011682016040523d82523d6000602084013e6110cb565b606091505b505090506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161111790613db5565b60006040518083038185875af1925050503d8060008114611154576040519150601f19603f3d011682016040523d82523d6000602084013e611159565b606091505b505090508180156111675750805b6111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e16565b60405180910390fd5b50505050565b6111b46119ef565b73ffffffffffffffffffffffffffffffffffffffff166111d26113fb565b73ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f9061367c565b60405180910390fd5b60005b81518160ff16101561136f57600060096000848460ff1681518110611253576112526138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613ea8565b60405180910390fd5b600160096000848460ff1681518110611302576113016138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550808061136790613ec8565b91505061122b565b5050565b61137b6119ef565b73ffffffffffffffffffffffffffffffffffffffff166113996113fb565b73ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e69061367c565b60405180910390fd5b6113f96000611ebd565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142c6119ef565b73ffffffffffffffffffffffffffffffffffffffff1661144a6113fb565b73ffffffffffffffffffffffffffffffffffffffff16146114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061367c565b60405180910390fd5b60005b81518160ff1610156115e7576000600a6000848460ff16815181106114cb576114ca6138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161461155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613ea8565b60405180910390fd5b6001600a6000848460ff168151811061157a576115796138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806115df90613ec8565b9150506114a3565b5050565b6115fd6115f66119ef565b8383611f81565b5050565b600060056000838152602001908152602001600020549050919050565b6116266119ef565b73ffffffffffffffffffffffffffffffffffffffff166116446113fb565b73ffffffffffffffffffffffffffffffffffffffff161461169a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116919061367c565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006117646119ef565b73ffffffffffffffffffffffffffffffffffffffff166117826113fb565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf9061367c565b60405180910390fd5b600860009054906101000a900460ff16905090565b6117f56119ef565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061183b575061183a856118356119ef565b6116c6565b5b61187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613f63565b60405180910390fd5b61188785858585856120ed565b5050505050565b6118966119ef565b73ffffffffffffffffffffffffffffffffffffffff166118b46113fb565b73ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061367c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090613ff5565b60405180910390fd5b61198281611ebd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060049080519060200190611a0d929190612994565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790614087565b60405180910390fd5b6000611a8a6119ef565b9050611aab81600087611a9c88612371565b611aa588612371565b876123eb565b826002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0b91906140a7565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b899291906140fd565b60405180910390a4611ba0816000878787876125bb565b5050505050565b8151835114611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290614198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c519061422a565b60405180910390fd5b6000611c646119ef565b9050611c748187878787876123eb565b60005b8451811015611e28576000858281518110611c9557611c946138ff565b5b602002602001015190506000858381518110611cb457611cb36138ff565b5b6020026020010151905060006002600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d906142bc565b60405180910390fd5b8181036002600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0d91906140a7565b9250508190555050505080611e2190613be2565b9050611c77565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e9f9291906142dc565b60405180910390a4611eb5818787878787612792565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614385565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120e09190612be9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361215c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121539061422a565b60405180910390fd5b60006121666119ef565b905061218681878761217788612371565b61218088612371565b876123eb565b60006002600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906142bc565b60405180910390fd5b8381036002600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836002600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d591906140a7565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516123529291906140fd565b60405180910390a46123688288888888886125bb565b50505050505050565b60606000600167ffffffffffffffff8111156123905761238f612cf6565b5b6040519080825280602002602001820160405280156123be5781602001602082028036833780820191505090505b50905082816000815181106123d6576123d56138ff565b5b60200260200101818152505080915050919050565b6123f9868686868686612969565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036124aa5760005b83518110156124a85782818151811061244c5761244b6138ff565b5b60200260200101516005600086848151811061246b5761246a6138ff565b5b60200260200101518152602001908152602001600020600082825461249091906140a7565b92505081905550806124a190613be2565b9050612430565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125b35760005b83518110156125b15760008482815181106124ff576124fe6138ff565b5b60200260200101519050600084838151811061251e5761251d6138ff565b5b6020026020010151905060006005600084815260200190815260200160002054905081811015612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614417565b60405180910390fd5b8181036005600085815260200190815260200160002081905550505050806125aa90613be2565b90506124e1565b505b505050505050565b6125da8473ffffffffffffffffffffffffffffffffffffffff16612971565b1561278a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161262095949392919061448c565b6020604051808303816000875af192505050801561265c57506040513d601f19601f8201168201806040525081019061265991906144fb565b60015b61270157612668614535565b806308c379a0036126c4575061267c614557565b8061268757506126c6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb9190612cca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f890614659565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f906146eb565b60405180910390fd5b505b505050505050565b6127b18473ffffffffffffffffffffffffffffffffffffffff16612971565b15612961578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016127f795949392919061470b565b6020604051808303816000875af192505050801561283357506040513d601f19601f8201168201806040525081019061283091906144fb565b60015b6128d85761283f614535565b806308c379a00361289b5750612853614557565b8061285e575061289d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929190612cca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cf90614659565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461295f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612956906146eb565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546129a0906135ff565b90600052602060002090601f0160209004810192826129c25760008555612a09565b82601f106129db57805160ff1916838001178555612a09565b82800160010185558215612a09579182015b82811115612a085782518255916020019190600101906129ed565b5b509050612a169190612a1a565b5090565b5b80821115612a33576000816000905550600101612a1b565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a7682612a4b565b9050919050565b612a8681612a6b565b8114612a9157600080fd5b50565b600081359050612aa381612a7d565b92915050565b6000819050919050565b612abc81612aa9565b8114612ac757600080fd5b50565b600081359050612ad981612ab3565b92915050565b60008060408385031215612af657612af5612a41565b5b6000612b0485828601612a94565b9250506020612b1585828601612aca565b9150509250929050565b612b2881612aa9565b82525050565b6000602082019050612b436000830184612b1f565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b7e81612b49565b8114612b8957600080fd5b50565b600081359050612b9b81612b75565b92915050565b600060208284031215612bb757612bb6612a41565b5b6000612bc584828501612b8c565b91505092915050565b60008115159050919050565b612be381612bce565b82525050565b6000602082019050612bfe6000830184612bda565b92915050565b600060208284031215612c1a57612c19612a41565b5b6000612c2884828501612aca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c6b578082015181840152602081019050612c50565b83811115612c7a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c9c82612c31565b612ca68185612c3c565b9350612cb6818560208601612c4d565b612cbf81612c80565b840191505092915050565b60006020820190508181036000830152612ce48184612c91565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d2e82612c80565b810181811067ffffffffffffffff82111715612d4d57612d4c612cf6565b5b80604052505050565b6000612d60612a37565b9050612d6c8282612d25565b919050565b600067ffffffffffffffff821115612d8c57612d8b612cf6565b5b612d9582612c80565b9050602081019050919050565b82818337600083830152505050565b6000612dc4612dbf84612d71565b612d56565b905082815260208101848484011115612de057612ddf612cf1565b5b612deb848285612da2565b509392505050565b600082601f830112612e0857612e07612cec565b5b8135612e18848260208601612db1565b91505092915050565b600060208284031215612e3757612e36612a41565b5b600082013567ffffffffffffffff811115612e5557612e54612a46565b5b612e6184828501612df3565b91505092915050565b600061ffff82169050919050565b612e8181612e6a565b8114612e8c57600080fd5b50565b600081359050612e9e81612e78565b92915050565b600060208284031215612eba57612eb9612a41565b5b6000612ec884828501612e8f565b91505092915050565b600067ffffffffffffffff821115612eec57612eeb612cf6565b5b602082029050602081019050919050565b600080fd5b6000612f15612f1084612ed1565b612d56565b90508083825260208201905060208402830185811115612f3857612f37612efd565b5b835b81811015612f615780612f4d8882612aca565b845260208401935050602081019050612f3a565b5050509392505050565b600082601f830112612f8057612f7f612cec565b5b8135612f90848260208601612f02565b91505092915050565b600067ffffffffffffffff821115612fb457612fb3612cf6565b5b612fbd82612c80565b9050602081019050919050565b6000612fdd612fd884612f99565b612d56565b905082815260208101848484011115612ff957612ff8612cf1565b5b613004848285612da2565b509392505050565b600082601f83011261302157613020612cec565b5b8135613031848260208601612fca565b91505092915050565b600080600080600060a0868803121561305657613055612a41565b5b600061306488828901612a94565b955050602061307588828901612a94565b945050604086013567ffffffffffffffff81111561309657613095612a46565b5b6130a288828901612f6b565b935050606086013567ffffffffffffffff8111156130c3576130c2612a46565b5b6130cf88828901612f6b565b925050608086013567ffffffffffffffff8111156130f0576130ef612a46565b5b6130fc8882890161300c565b9150509295509295909350565b60006020828403121561311f5761311e612a41565b5b600061312d84828501612a94565b91505092915050565b600060ff82169050919050565b61314c81613136565b82525050565b60006020820190506131676000830184613143565b92915050565b600067ffffffffffffffff82111561318857613187612cf6565b5b602082029050602081019050919050565b60006131ac6131a78461316d565b612d56565b905080838252602082019050602084028301858111156131cf576131ce612efd565b5b835b818110156131f857806131e48882612a94565b8452602084019350506020810190506131d1565b5050509392505050565b600082601f83011261321757613216612cec565b5b8135613227848260208601613199565b91505092915050565b6000806040838503121561324757613246612a41565b5b600083013567ffffffffffffffff81111561326557613264612a46565b5b61327185828601613202565b925050602083013567ffffffffffffffff81111561329257613291612a46565b5b61329e85828601612f6b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132dd81612aa9565b82525050565b60006132ef83836132d4565b60208301905092915050565b6000602082019050919050565b6000613313826132a8565b61331d81856132b3565b9350613328836132c4565b8060005b8381101561335957815161334088826132e3565b975061334b836132fb565b92505060018101905061332c565b5085935050505092915050565b600060208201905081810360008301526133808184613308565b905092915050565b60006020828403121561339e5761339d612a41565b5b600082013567ffffffffffffffff8111156133bc576133bb612a46565b5b6133c884828501613202565b91505092915050565b6133da81612a6b565b82525050565b60006020820190506133f560008301846133d1565b92915050565b61340481612bce565b811461340f57600080fd5b50565b600081359050613421816133fb565b92915050565b6000806040838503121561343e5761343d612a41565b5b600061344c85828601612a94565b925050602061345d85828601613412565b9150509250929050565b6000806040838503121561347e5761347d612a41565b5b600061348c85828601612a94565b925050602061349d85828601612a94565b9150509250929050565b600080600080600060a086880312156134c3576134c2612a41565b5b60006134d188828901612a94565b95505060206134e288828901612a94565b94505060406134f388828901612aca565b935050606061350488828901612aca565b925050608086013567ffffffffffffffff81111561352557613524612a46565b5b6135318882890161300c565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061359a602b83612c3c565b91506135a58261353e565b604082019050919050565b600060208201905081810360008301526135c98161358d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061361757607f821691505b60208210810361362a576136296135d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613666602083612c3c565b915061367182613630565b602082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006136d2601f83612c3c565b91506136dd8261369c565b602082019050919050565b60006020820190508181036000830152613701816136c5565b9050919050565b7f5468657265206973206e6f2073616c65206163746976652063757272656e746c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b6000613764602183612c3c565b915061376f82613708565b604082019050919050565b6000602082019050818103600083015261379381613757565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137d482612e6a565b91506137df83612e6a565b92508261ffff038211156137f6576137f561379a565b5b828201905092915050565b7f4d696e74656420616d6f756e742077696c6c20657863656564206d617820737560008201527f70706c792e000000000000000000000000000000000000000000000000000000602082015250565b600061385d602583612c3c565b915061386882613801565b604082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b7f416464726573732063616e6e6f74206d696e74206120746f6b656e2e00000000600082015250565b60006138c9601c83612c3c565b91506138d482613893565b602082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e73756666696369656e742065746865722070726f766964656420746f206d60008201527f696e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061398a602483612c3c565b91506139958261392e565b604082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f52657365727665207374617465206e6f74206163746976650000000000000000600082015250565b60006139f6601883612c3c565b9150613a01826139c0565b602082019050919050565b60006020820190508181036000830152613a25816139e9565b9050919050565b7f4d696e74656420616d6f756e742077696c6c20657863656564206d617820737560008201527f70706c7900000000000000000000000000000000000000000000000000000000602082015250565b6000613a88602483612c3c565b9150613a9382613a2c565b604082019050919050565b60006020820190508181036000830152613ab781613a7b565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613b1a603283612c3c565b9150613b2582613abe565b604082019050919050565b60006020820190508181036000830152613b4981613b0d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613bac602983612c3c565b9150613bb782613b50565b604082019050919050565b60006020820190508181036000830152613bdb81613b9f565b9050919050565b6000613bed82612aa9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c1f57613c1e61379a565b5b600182019050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613c60601483612c3c565b9150613c6b82613c2a565b602082019050919050565b60006020820190508181036000830152613c8f81613c53565b9050919050565b6000613ca182612aa9565b9150613cac83612aa9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ce557613ce461379a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2a82612aa9565b9150613d3583612aa9565b925082613d4557613d44613cf0565b5b828204905092915050565b6000613d5b82612aa9565b9150613d6683612aa9565b925082821015613d7957613d7861379a565b5b828203905092915050565b600081905092915050565b50565b6000613d9f600083613d84565b9150613daa82613d8f565b600082019050919050565b6000613dc082613d92565b9150819050919050565b7f4574686572207769746864726177616c206661696c6564000000000000000000600082015250565b6000613e00601783612c3c565b9150613e0b82613dca565b602082019050919050565b60006020820190508181036000830152613e2f81613df3565b9050919050565b7f4164647265737320616c72656164792065786973747320696e2077686974656c60008201527f6973740000000000000000000000000000000000000000000000000000000000602082015250565b6000613e92602383612c3c565b9150613e9d82613e36565b604082019050919050565b60006020820190508181036000830152613ec181613e85565b9050919050565b6000613ed382613136565b915060ff8203613ee657613ee561379a565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613f4d602983612c3c565b9150613f5882613ef1565b604082019050919050565b60006020820190508181036000830152613f7c81613f40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fdf602683612c3c565b9150613fea82613f83565b604082019050919050565b6000602082019050818103600083015261400e81613fd2565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614071602183612c3c565b915061407c82614015565b604082019050919050565b600060208201905081810360008301526140a081614064565b9050919050565b60006140b282612aa9565b91506140bd83612aa9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140f2576140f161379a565b5b828201905092915050565b60006040820190506141126000830185612b1f565b61411f6020830184612b1f565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614182602883612c3c565b915061418d82614126565b604082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614214602583612c3c565b915061421f826141b8565b604082019050919050565b6000602082019050818103600083015261424381614207565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006142a6602a83612c3c565b91506142b18261424a565b604082019050919050565b600060208201905081810360008301526142d581614299565b9050919050565b600060408201905081810360008301526142f68185613308565b9050818103602083015261430a8184613308565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061436f602983612c3c565b915061437a82614313565b604082019050919050565b6000602082019050818103600083015261439e81614362565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614401602883612c3c565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061445e82614437565b6144688185614442565b9350614478818560208601612c4d565b61448181612c80565b840191505092915050565b600060a0820190506144a160008301886133d1565b6144ae60208301876133d1565b6144bb6040830186612b1f565b6144c86060830185612b1f565b81810360808301526144da8184614453565b90509695505050505050565b6000815190506144f581612b75565b92915050565b60006020828403121561451157614510612a41565b5b600061451f848285016144e6565b91505092915050565b60008160e01c9050919050565b600060033d11156145545760046000803e614551600051614528565b90505b90565b600060443d106145e457614569612a37565b60043d036004823e80513d602482011167ffffffffffffffff821117156145915750506145e4565b808201805167ffffffffffffffff8111156145af57505050506145e4565b80602083010160043d0385018111156145cc5750505050506145e4565b6145db82602001850186612d25565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614643603483612c3c565b915061464e826145e7565b604082019050919050565b6000602082019050818103600083015261467281614636565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006146d5602883612c3c565b91506146e082614679565b604082019050919050565b60006020820190508181036000830152614704816146c8565b9050919050565b600060a08201905061472060008301886133d1565b61472d60208301876133d1565b818103604083015261473f8186613308565b905081810360608301526147538185613308565b905081810360808301526147678184614453565b9050969550505050505056fea2646970667358221220a7f502e3684690cbcd7bcc54fc15432010f10701e64d65f1bd99ee1a1ce8c4a064736f6c634300080d00330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f6062ae6d646709c26d83814102eea3cad5593f40000000000000000000000000d8a7978b137c7f74cc7ba967e6199b79cb21684000000000000000000000000000000000000000000000000000000000000003c697066733a2f2f516d5366564e584865556a6464794c52635143566a4e70794c344543697859765838466a375675785a4338726e482f302e6a736f6e00000000